<!DOCTYPE html>
<html lang="zh">
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>JAVA反序列化</title>
  <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,400i,700&display=fallback">
  <link rel="stylesheet" href="../../plugins/fontawesome-free/css/all.min.css">
  <link rel="stylesheet" href="../../plugins/overlayScrollbars/css/OverlayScrollbars.min.css">
  <link rel="stylesheet" href="../../dist/css/adminlte.min.css">
</head>
<body class="hold-transition dark-mode sidebar-mini layout-fixed layout-navbar-fixed layout-footer-fixed">
<div class="wrapper">
  <nav id="Navbar" class="main-header navbar navbar-expand navbar-dark"></nav>
  <aside id="Container" class="main-sidebar sidebar-dark-primary elevation-4"></aside>
  <div class="content-wrapper" id="Wrapper">
    <section class="content-header" id="WrapperHeader"></section>
    <section class="content">
      <div class="container-fluid">
        <div id="notice"></div>
        <div class="card card-primary card-outline">
          <div class="card-header">
            <h3 class="card-title">动态反序列化对象</h3>
          </div>
          <div class="card-body">
            <div class="card card-primary">
              <div class="card-header">
                <h3 class="card-title">动态反序列化对象</h3>
              </div>
              <form action="" onsubmit="return false">
                <div class="card-body">
                  <div class="form-group">
                    <label for="cmd">输入命令生成payload</label>
                    <input type="text" class="form-control" name="cmd" id="cmd" placeholder="Enter cmd">
                  </div>
                  <div class="card-footer">
                    <button type="submit" class="btn btn-primary" onclick="subCmd()">获取payload</button>
                  </div>
                </div>
              </form>
            </div>
          </div>
          <div class="card-body">
            <div class="card card-primary">
              <div class="card-header">
                <h3 class="card-title">提交反序列化payload</h3>
              </div>
              <form action="" onsubmit="return false">
                <div class="card-body">
                  <div class="form-group">
                    <label for="serializeText">提交反序列化payload</label>
                    <input type="text" class="form-control" name="serializeText" id="serializeText" placeholder="Enter cmd">
                  </div>
                  <div class="card-footer">
                    <button type="submit" class="btn btn-primary" onclick="setCookie()">提交payload</button>
                  </div>
                </div>
              </form>
            </div>
          </div>
        </div>
        <div class="card card-primary card-outline" id="showSource">
          <div class="card-header">
            <h3 class="card-title">源代码&amp;提示</h3>
          </div>
          <div class="card-body">
            <div>
              <p>反序列化出来的类需要在项目中存在。此项目中存在可利用的 <code>commons-collections:3.2.1</code> 依赖。</p>
              <p>系统的JDK版本较高，但仍然可以通过构造不同的利用链造成命令执行。这里我们可以使用 <code>https://github.com/frohoff/ysoserial</code> 其中的 CommonsCollections6 利用链</p>
              <p><strong>UserSerializeEntity 的代码</strong></p>
              <pre><code>&#x70;&#x61;&#x63;&#x6B;&#x61;&#x67;&#x65;&#x20;&#x63;&#x6F;&#x6D;&period;&#x70;&#x69;&#x6B;&#x61;&period;&#x65;&#x6C;&#x65;&#x63;&#x74;&#x72;&#x69;&#x63;&#x72;&#x61;&#x74;&period;&#x73;&#x65;&#x72;&#x69;&#x61;&#x6C;&#x69;&#x7A;&#x65;&period;&#x70;&#x6F;&semi;&NewLine;&NewLine;&#x69;&#x6D;&#x70;&#x6F;&#x72;&#x74;&#x20;&#x6F;&#x72;&#x67;&period;&#x61;&#x70;&#x61;&#x63;&#x68;&#x65;&period;&#x63;&#x6F;&#x6D;&#x6D;&#x6F;&#x6E;&#x73;&period;&#x63;&#x6F;&#x6C;&#x6C;&#x65;&#x63;&#x74;&#x69;&#x6F;&#x6E;&#x73;&period;&#x54;&#x72;&#x61;&#x6E;&#x73;&#x66;&#x6F;&#x72;&#x6D;&#x65;&#x72;&semi;&NewLine;&NewLine;&#x69;&#x6D;&#x70;&#x6F;&#x72;&#x74;&#x20;&#x6A;&#x61;&#x76;&#x61;&period;&#x69;&#x6F;&period;&ast;&semi;&NewLine;&#x69;&#x6D;&#x70;&#x6F;&#x72;&#x74;&#x20;&#x6A;&#x61;&#x76;&#x61;&period;&#x6E;&#x69;&#x6F;&period;&#x63;&#x68;&#x61;&#x72;&#x73;&#x65;&#x74;&period;&#x53;&#x74;&#x61;&#x6E;&#x64;&#x61;&#x72;&#x64;&#x43;&#x68;&#x61;&#x72;&#x73;&#x65;&#x74;&#x73;&semi;&NewLine;&NewLine;&#x70;&#x75;&#x62;&#x6C;&#x69;&#x63;&#x20;&#x63;&#x6C;&#x61;&#x73;&#x73;&#x20;&#x55;&#x73;&#x65;&#x72;&#x53;&#x65;&#x72;&#x69;&#x61;&#x6C;&#x69;&#x7A;&#x65;&#x45;&#x6E;&#x74;&#x69;&#x74;&#x79;&#x20;&#x69;&#x6D;&#x70;&#x6C;&#x65;&#x6D;&#x65;&#x6E;&#x74;&#x73;&#x20;&#x53;&#x65;&#x72;&#x69;&#x61;&#x6C;&#x69;&#x7A;&#x61;&#x62;&#x6C;&#x65;&#x20;&lcub;&NewLine;&#x20;&#x20;&#x20;&#x20;&commat;&#x53;&#x65;&#x72;&#x69;&#x61;&#x6C;&NewLine;&#x20;&#x20;&#x20;&#x20;&#x70;&#x72;&#x69;&#x76;&#x61;&#x74;&#x65;&#x20;&#x73;&#x74;&#x61;&#x74;&#x69;&#x63;&#x20;&#x66;&#x69;&#x6E;&#x61;&#x6C;&#x20;&#x6C;&#x6F;&#x6E;&#x67;&#x20;&#x73;&#x65;&#x72;&#x69;&#x61;&#x6C;&#x56;&#x65;&#x72;&#x73;&#x69;&#x6F;&#x6E;&#x55;&#x49;&#x44;&#x20;&equals;&#x20;&#x2D;&#x35;&#x32;&#x38;&#x36;&#x30;&#x33;&#x38;&#x39;&#x38;&#x34;&#x31;&#x31;&#x32;&#x34;&#x34;&#x34;&#x38;&#x35;&#x31;&#x4C;&semi;&NewLine;&#x20;&#x20;&#x20;&#x20;&#x70;&#x72;&#x6F;&#x74;&#x65;&#x63;&#x74;&#x65;&#x64;&#x20;&#x73;&#x74;&#x61;&#x74;&#x69;&#x63;&#x20;&#x53;&#x74;&#x72;&#x69;&#x6E;&#x67;&#x20;&#x72;&#x65;&#x73;&semi;&NewLine;&NewLine;&#x20;&#x20;&#x20;&#x20;&#x70;&#x72;&#x6F;&#x74;&#x65;&#x63;&#x74;&#x65;&#x64;&#x20;&#x66;&#x69;&#x6E;&#x61;&#x6C;&#x20;&#x54;&#x72;&#x61;&#x6E;&#x73;&#x66;&#x6F;&#x72;&#x6D;&#x65;&#x72;&#x20;&#x76;&#x61;&#x6C;&#x75;&#x65;&#x54;&#x72;&#x61;&#x6E;&#x73;&#x66;&#x6F;&#x72;&#x6D;&#x65;&#x72;&semi;&NewLine;&NewLine;&#x20;&#x20;&#x20;&#x20;&#x70;&#x75;&#x62;&#x6C;&#x69;&#x63;&#x20;&#x55;&#x73;&#x65;&#x72;&#x53;&#x65;&#x72;&#x69;&#x61;&#x6C;&#x69;&#x7A;&#x65;&#x45;&#x6E;&#x74;&#x69;&#x74;&#x79;&lpar;&#x54;&#x72;&#x61;&#x6E;&#x73;&#x66;&#x6F;&#x72;&#x6D;&#x65;&#x72;&#x20;&#x76;&#x61;&#x6C;&#x75;&#x65;&#x54;&#x72;&#x61;&#x6E;&#x73;&#x66;&#x6F;&#x72;&#x6D;&#x65;&#x72;&rpar;&#x20;&lcub;&NewLine;&#x20;&#x20;&#x20;&#x20;&#x20;&#x20;&#x20;&#x20;&#x74;&#x68;&#x69;&#x73;&period;&#x76;&#x61;&#x6C;&#x75;&#x65;&#x54;&#x72;&#x61;&#x6E;&#x73;&#x66;&#x6F;&#x72;&#x6D;&#x65;&#x72;&#x20;&equals;&#x20;&#x76;&#x61;&#x6C;&#x75;&#x65;&#x54;&#x72;&#x61;&#x6E;&#x73;&#x66;&#x6F;&#x72;&#x6D;&#x65;&#x72;&semi;&NewLine;&#x20;&#x20;&#x20;&#x20;&rcub;&NewLine;&NewLine;&#x20;&#x20;&#x20;&#x20;&commat;&#x53;&#x65;&#x72;&#x69;&#x61;&#x6C;&NewLine;&#x20;&#x20;&#x20;&#x20;&#x70;&#x72;&#x69;&#x76;&#x61;&#x74;&#x65;&#x20;&#x76;&#x6F;&#x69;&#x64;&#x20;&#x72;&#x65;&#x61;&#x64;&#x4F;&#x62;&#x6A;&#x65;&#x63;&#x74;&lpar;&#x6A;&#x61;&#x76;&#x61;&period;&#x69;&#x6F;&period;&#x4F;&#x62;&#x6A;&#x65;&#x63;&#x74;&#x49;&#x6E;&#x70;&#x75;&#x74;&#x53;&#x74;&#x72;&#x65;&#x61;&#x6D;&#x20;&#x73;&#x74;&#x72;&#x65;&#x61;&#x6D;&rpar;&#x20;&#x74;&#x68;&#x72;&#x6F;&#x77;&#x73;&#x20;&#x49;&#x4F;&#x45;&#x78;&#x63;&#x65;&#x70;&#x74;&#x69;&#x6F;&#x6E;&comma;&#x20;&#x43;&#x6C;&#x61;&#x73;&#x73;&#x4E;&#x6F;&#x74;&#x46;&#x6F;&#x75;&#x6E;&#x64;&#x45;&#x78;&#x63;&#x65;&#x70;&#x74;&#x69;&#x6F;&#x6E;&comma;&#x20;&#x49;&#x6E;&#x74;&#x65;&#x72;&#x72;&#x75;&#x70;&#x74;&#x65;&#x64;&#x45;&#x78;&#x63;&#x65;&#x70;&#x74;&#x69;&#x6F;&#x6E;&#x20;&lcub;&NewLine;&#x20;&#x20;&#x20;&#x20;&#x20;&#x20;&#x20;&#x20;&#x73;&#x74;&#x72;&#x65;&#x61;&#x6D;&period;&#x64;&#x65;&#x66;&#x61;&#x75;&#x6C;&#x74;&#x52;&#x65;&#x61;&#x64;&#x4F;&#x62;&#x6A;&#x65;&#x63;&#x74;&lpar;&rpar;&semi;&NewLine;&#x20;&#x20;&#x20;&#x20;&#x20;&#x20;&#x20;&#x20;&sol;&sol;&#x20;&#x4E3A;&#x4E86;&#x505A;&#x56DE;&#x663E;&#xFF0C;&#x6B63;&#x5E38;&#x4E1A;&#x52A1;&#x4E0D;&#x4F1A;&#x8FD9;&#x4E48;&#x5199;&#x3002;&NewLine;&#x20;&#x20;&#x20;&#x20;&#x20;&#x20;&#x20;&#x20;&#x50;&#x72;&#x6F;&#x63;&#x65;&#x73;&#x73;&#x20;&#x70;&#x20;&equals;&#x20;&lpar;&#x50;&#x72;&#x6F;&#x63;&#x65;&#x73;&#x73;&rpar;&#x20;&#x63;&#x68;&#x65;&#x63;&#x6B;&#x56;&#x61;&#x6C;&#x75;&#x65;&lpar;&#x6E;&#x65;&#x77;&#x20;&#x4F;&#x62;&#x6A;&#x65;&#x63;&#x74;&lpar;&rpar;&rpar;&semi;&NewLine;&#x20;&#x20;&#x20;&#x20;&#x20;&#x20;&#x20;&#x20;&#x49;&#x6E;&#x70;&#x75;&#x74;&#x53;&#x74;&#x72;&#x65;&#x61;&#x6D;&#x20;&#x69;&#x73;&#x20;&equals;&#x20;&#x70;&period;&#x67;&#x65;&#x74;&#x49;&#x6E;&#x70;&#x75;&#x74;&#x53;&#x74;&#x72;&#x65;&#x61;&#x6D;&lpar;&rpar;&semi;&NewLine;&#x20;&#x20;&#x20;&#x20;&#x20;&#x20;&#x20;&#x20;&#x42;&#x75;&#x66;&#x66;&#x65;&#x72;&#x65;&#x64;&#x52;&#x65;&#x61;&#x64;&#x65;&#x72;&#x20;&#x72;&#x65;&#x61;&#x64;&#x65;&#x72;&#x20;&equals;&#x20;&#x6E;&#x65;&#x77;&#x20;&#x42;&#x75;&#x66;&#x66;&#x65;&#x72;&#x65;&#x64;&#x52;&#x65;&#x61;&#x64;&#x65;&#x72;&lpar;&#x6E;&#x65;&#x77;&#x20;&#x49;&#x6E;&#x70;&#x75;&#x74;&#x53;&#x74;&#x72;&#x65;&#x61;&#x6D;&#x52;&#x65;&#x61;&#x64;&#x65;&#x72;&lpar;&#x69;&#x73;&comma;&#x20;&#x53;&#x74;&#x61;&#x6E;&#x64;&#x61;&#x72;&#x64;&#x43;&#x68;&#x61;&#x72;&#x73;&#x65;&#x74;&#x73;&period;&#x55;&#x54;&#x46;&lowbar;&#x38;&rpar;&rpar;&semi;&NewLine;&#x20;&#x20;&#x20;&#x20;&#x20;&#x20;&#x20;&#x20;&#x53;&#x74;&#x72;&#x69;&#x6E;&#x67;&#x20;&#x6C;&#x69;&#x6E;&#x65;&semi;&NewLine;&#x20;&#x20;&#x20;&#x20;&#x20;&#x20;&#x20;&#x20;&#x53;&#x74;&#x72;&#x69;&#x6E;&#x67;&#x42;&#x75;&#x69;&#x6C;&#x64;&#x65;&#x72;&#x20;&#x74;&#x65;&#x78;&#x74;&#x20;&equals;&#x20;&#x6E;&#x65;&#x77;&#x20;&#x53;&#x74;&#x72;&#x69;&#x6E;&#x67;&#x42;&#x75;&#x69;&#x6C;&#x64;&#x65;&#x72;&lpar;&rpar;&semi;&NewLine;&#x20;&#x20;&#x20;&#x20;&#x20;&#x20;&#x20;&#x20;&#x77;&#x68;&#x69;&#x6C;&#x65;&lpar;&lpar;&#x6C;&#x69;&#x6E;&#x65;&#x20;&equals;&#x20;&#x72;&#x65;&#x61;&#x64;&#x65;&#x72;&period;&#x72;&#x65;&#x61;&#x64;&#x4C;&#x69;&#x6E;&#x65;&lpar;&rpar;&rpar;&excl;&equals;&#x20;&#x6E;&#x75;&#x6C;&#x6C;&rpar;&lcub;&NewLine;&#x20;&#x20;&#x20;&#x20;&#x20;&#x20;&#x20;&#x20;&#x20;&#x20;&#x20;&#x20;&#x74;&#x65;&#x78;&#x74;&period;&#x61;&#x70;&#x70;&#x65;&#x6E;&#x64;&lpar;&#x6C;&#x69;&#x6E;&#x65;&rpar;&period;&#x61;&#x70;&#x70;&#x65;&#x6E;&#x64;&lpar;&quot;&#x5C;&#x6E;&quot;&rpar;&semi;&NewLine;&#x20;&#x20;&#x20;&#x20;&#x20;&#x20;&#x20;&#x20;&rcub;&NewLine;&#x20;&#x20;&#x20;&#x20;&#x20;&#x20;&#x20;&#x20;&#x70;&period;&#x77;&#x61;&#x69;&#x74;&#x46;&#x6F;&#x72;&lpar;&rpar;&semi;&NewLine;&#x20;&#x20;&#x20;&#x20;&#x20;&#x20;&#x20;&#x20;&#x69;&#x73;&period;&#x63;&#x6C;&#x6F;&#x73;&#x65;&lpar;&rpar;&semi;&NewLine;&#x20;&#x20;&#x20;&#x20;&#x20;&#x20;&#x20;&#x20;&#x72;&#x65;&#x61;&#x64;&#x65;&#x72;&period;&#x63;&#x6C;&#x6F;&#x73;&#x65;&lpar;&rpar;&semi;&NewLine;&#x20;&#x20;&#x20;&#x20;&#x20;&#x20;&#x20;&#x20;&#x70;&period;&#x64;&#x65;&#x73;&#x74;&#x72;&#x6F;&#x79;&lpar;&rpar;&semi;&NewLine;&#x20;&#x20;&#x20;&#x20;&#x20;&#x20;&#x20;&#x20;&#x72;&#x65;&#x73;&#x20;&equals;&#x20;&#x20;&#x74;&#x65;&#x78;&#x74;&period;&#x74;&#x6F;&#x53;&#x74;&#x72;&#x69;&#x6E;&#x67;&lpar;&rpar;&semi;&NewLine;&#x20;&#x20;&#x20;&#x20;&rcub;&NewLine;&NewLine;&#x20;&#x20;&#x20;&#x20;&#x70;&#x72;&#x6F;&#x74;&#x65;&#x63;&#x74;&#x65;&#x64;&#x20;&#x4F;&#x62;&#x6A;&#x65;&#x63;&#x74;&#x20;&#x63;&#x68;&#x65;&#x63;&#x6B;&#x56;&#x61;&#x6C;&#x75;&#x65;&lpar;&#x4F;&#x62;&#x6A;&#x65;&#x63;&#x74;&#x20;&#x76;&#x61;&#x6C;&#x75;&#x65;&rpar;&lcub;&NewLine;&#x20;&#x20;&#x20;&#x20;&#x20;&#x20;&#x20;&#x20;&#x72;&#x65;&#x74;&#x75;&#x72;&#x6E;&#x20;&#x76;&#x61;&#x6C;&#x75;&#x65;&#x54;&#x72;&#x61;&#x6E;&#x73;&#x66;&#x6F;&#x72;&#x6D;&#x65;&#x72;&period;&#x74;&#x72;&#x61;&#x6E;&#x73;&#x66;&#x6F;&#x72;&#x6D;&lpar;&#x76;&#x61;&#x6C;&#x75;&#x65;&rpar;&semi;&NewLine;&#x20;&#x20;&#x20;&#x20;&rcub;&NewLine;&NewLine;&#x20;&#x20;&#x20;&#x20;&commat;&#x4F;&#x76;&#x65;&#x72;&#x72;&#x69;&#x64;&#x65;&NewLine;&#x20;&#x20;&#x20;&#x20;&#x70;&#x75;&#x62;&#x6C;&#x69;&#x63;&#x20;&#x53;&#x74;&#x72;&#x69;&#x6E;&#x67;&#x20;&#x74;&#x6F;&#x53;&#x74;&#x72;&#x69;&#x6E;&#x67;&lpar;&rpar;&#x20;&lcub;&NewLine;&#x20;&#x20;&#x20;&#x20;&#x20;&#x20;&#x20;&#x20;&#x72;&#x65;&#x74;&#x75;&#x72;&#x6E;&#x20;&quot;&#x55;&#x73;&#x65;&#x72;&#x53;&#x65;&#x72;&#x69;&#x61;&#x6C;&#x69;&#x7A;&#x65;&#x45;&#x6E;&#x74;&#x69;&#x74;&#x79;&lcub;&quot;&plus;&#x72;&#x65;&#x73;&plus;&quot;&rcub;&quot;&semi;&NewLine;&#x20;&#x20;&#x20;&#x20;&rcub;&NewLine;&rcub;&NewLine;</code></pre>
              <p>你可以在本地自行构建该类，如果不知道如何编写可以参考 <code>com/pika/electricrat/serialize/SerializeServlet.java</code> 中的 <code>deserialize</code> 方法</p>
            </div>
          </div>
        </div>
      </div>
    </section>
  </div>
</div>

  <aside class="control-sidebar control-sidebar-dark">
    <!-- Control sidebar content goes here -->
  </aside>
  <footer class="main-footer"></footer>
  <script src="../../dist/js/templateHandle.js"></script>
  <script>
    setWrapperHeader("JAVA反序列化", ["动态反序列化对象"]);
  </script>
  <script src="../../plugins/jquery/jquery.min.js"></script>
  <script src="../../plugins/bootstrap/js/bootstrap.bundle.min.js"></script>
  <script src="../../plugins/overlayScrollbars/js/jquery.overlayScrollbars.min.js"></script>
  <script src="../../dist/js/adminlte.js"></script>
  <script>
    let notice_dom = $("#notice")[0];
    let serialize_text_dom = $("#serializeText")[0];
    function subCmd(){
      let cmd = $("#cmd")[0].value;
      if (!cmd)notice_dom.innerHTML = generateNote("请输入命令");
      let data = {
        cmd
      }
      $.post({
        url: `${project_name}serializeAction/deserialize`,
        data,
        success(resp){
          notice_dom.innerHTML = generateNote("payload：" + resp);
          serialize_text_dom.value = resp;
        }
      })
    }

    function setCookie(){
      if (serialize_text_dom.value.length > 0){
        let data = {
          obj: serialize_text_dom.value
        }
        $.post({
          url: `${project_name}serializeAction/setRememberMe`,
          data,
          success(resp){
            subSerializeText();
          }
        })
      } else {
        notice_dom.innerHTML = generateNote("请先获取 payload，使用自带或者自行生成。");
      }
    }

    function subSerializeText(){
      $.post({
        url: `${project_name}serializeAction/serializeView`,
        success(resp){
          notice_dom.innerHTML = generateNote("输出结果：" + resp);
        },
        fail(){
          notice_dom.innerHTML = generateNote("反序列化出错");
        }
      })
    }
  </script>
</body>
</html>
